﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TARLib.Stats
{
    public class StatisticaStatoComanda
    {
        public StatisticaStatoComanda(string lettera, DateTime? dataOraInizio, DateTime? dataOraFine, int numeroComande, int numeroProdotti, int numeroComandeChecked, DateTime? dataOraInizioCheckIn, DateTime? dataOraFineCheckIn, int numeroComandePrinted, DateTime? dataOraInizioStampa, DateTime? dataOraFineStampa, int numeroComandeDelivered, DateTime? dataOraInizioConsegna, DateTime? dataOraFineConsegna, bool isCheckInRichiesto, bool isStampaRemotaRichiesta, bool isConsegnaRichiesta)
        {
            Lettera = lettera;
            DataOraInizio = dataOraInizio;
            DataOraFine = dataOraFine;
            NumeroComande = numeroComande;
            NumeroProdotti = numeroProdotti;
            NumeroComandeChecked = numeroComandeChecked;
            DataOraInizioCheckIn = dataOraInizioCheckIn;
            DataOraFineCheckIn = dataOraFineCheckIn;
            NumeroComandePrinted = numeroComandePrinted;
            DataOraInizioStampa = dataOraInizioStampa;
            DataOraFineStampa = dataOraFineStampa;
            NumeroComandeDelivered = numeroComandeDelivered;
            DataOraInizioConsegna = dataOraInizioConsegna;
            DataOraFineConsegna = dataOraFineConsegna;

            IsCheckInRichiesto = isCheckInRichiesto;
            IsStampaRemotaRichiesta = isStampaRemotaRichiesta;
            IsConsegnaRichiesta = isConsegnaRichiesta;
        }

        public string Lettera { get; set; }
        public DateTime? DataOraInizio { get; set; }
        public DateTime? DataOraFine { get; set; }
        public int NumeroComande { get; set; }
        public int NumeroProdotti { get; set; }
        public int NumeroComandeChecked { get; set; }
        public DateTime? DataOraInizioCheckIn { get; set; }
        public DateTime? DataOraFineCheckIn { get; set; }
        public int NumeroComandePrinted { get; set; }
        public DateTime? DataOraInizioStampa { get; set; }
        public DateTime? DataOraFineStampa { get; set; }
        public int NumeroComandeDelivered { get; set; }
        public DateTime? DataOraInizioConsegna { get; set; }
        public DateTime? DataOraFineConsegna { get; set; }

        public bool IsCheckInRichiesto { get; set; }
        public bool IsStampaRemotaRichiesta { get; set; }
        public bool IsConsegnaRichiesta { get; set; }

        // Proprietà calcolate e binding
        public int PercentualeCheckIn
        {
            get
            {
                if (IsCheckInRichiesto)
                {
                    if (NumeroComande > 0)
                        return (int)((NumeroComandeChecked * 100) / NumeroComande);
                    else
                        return 0;
                }
                else
                {
                    return 0;
                }
            }
        }

        public int PercentualeStampa
        {
            get
            {
                if (IsStampaRemotaRichiesta)
                {
                    if (IsCheckInRichiesto)
                    {
                        if (NumeroComandeChecked > 0)
                            return (int)((NumeroComandePrinted * 100) / NumeroComandeChecked);
                        else
                            return 0;
                    }
                    else
                    {
                        if (NumeroComande > 0)
                            return (int)((NumeroComandePrinted * 100) / NumeroComande);
                        else
                            return 0;
                    }
                }
                else
                {
                    return 0;
                }
            }
        }

        public int PercentualeConsegna
        {
            get
            {
                if (IsConsegnaRichiesta)
                {
                    if (IsStampaRemotaRichiesta)
                    {
                        if (NumeroComandePrinted > 0)
                            return (int)((NumeroComandeDelivered * 100) / NumeroComandePrinted);
                        else
                            return 0;
                    }
                    else
                    {
                        if (IsCheckInRichiesto)
                        {
                            if (NumeroComandeChecked > 0)
                                return (int)((NumeroComandeDelivered * 100) / NumeroComandeChecked);
                            else
                                return 0;
                        }
                        else
                        {
                            if (NumeroComande > 0)
                                return (int)((NumeroComandeDelivered * 100) / NumeroComande);
                            else
                                return 0;
                        }
                    }
                }
                else
                {
                    return 0;
                }
            }
        }

        public string OraInizioStringa { get { return String.Format("{0:HH:mm}", DataOraInizio); } }
        public string OraFineStringa { get { return String.Format("{0:HH:mm}", DataOraFine); } }
        public string OraInizioCheckInStringa { get { return String.Format("{0:HH:mm}", DataOraInizioCheckIn); } }
        public string OraFineCheckInStringa { get { return String.Format("{0:HH:mm}", DataOraFineCheckIn); } }
        public string OraInizioStampaStringa { get { return String.Format("{0:HH:mm}", DataOraInizioStampa); } }
        public string OraFineStampaStringa { get { return String.Format("{0:HH:mm}", DataOraFineStampa); } }
        public string OraInizioConsegnaStringa { get { return String.Format("{0:HH:mm}", DataOraInizioConsegna); } }
        public string OraFineConsegnaStringa { get { return String.Format("{0:HH:mm}", DataOraFineConsegna); } }
    }
}
